/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package Modelo;

import java.util.ArrayList;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.Hashtable;
import sun.security.jca.GetInstance;



/* Javier:
 * Esta clase sigue un patron de disenio singleton para que solo exista un objeto
 * de este tipo.
 * Desde afuera de esta clase puede invocarse de la siguiente manera.
 *   Universo miUniverso = Universo.getInstance();
     ConfiguracionSemaforo x  = ObtenerConfiguracion(5);
   Entonces 'x.getTiempoVerdeHorizontal' sera 60;
   Entonces 'x.getTiempoVerdeVertical'   sera 30;
*/

public class  Universo {
    private Dictionary universo;
    
    private static Universo instance;
    private int intervalo= 720;
    
    private Universo(){
        universo = new Hashtable();
        universo.put( 1, new ConfiguracionSemaforo( 30, 30));
        universo.put( 2, new ConfiguracionSemaforo( 30, 60));
        universo.put( 3, new ConfiguracionSemaforo( 30, 90));
        universo.put( 4, new ConfiguracionSemaforo( 30,120)); 
        universo.put( 5, new ConfiguracionSemaforo( 60, 30));
        universo.put( 6, new ConfiguracionSemaforo( 60, 60));
        universo.put( 7, new ConfiguracionSemaforo( 60, 90));
        universo.put( 8, new ConfiguracionSemaforo( 60,120));
        universo.put( 9, new ConfiguracionSemaforo( 90, 30));
        universo.put(10, new ConfiguracionSemaforo( 90, 60));
        universo.put(11, new ConfiguracionSemaforo( 90, 90));
        universo.put(12, new ConfiguracionSemaforo( 90,120));
        universo.put(13, new ConfiguracionSemaforo(120, 30));
        universo.put(14, new ConfiguracionSemaforo(120, 60));
        universo.put(15, new ConfiguracionSemaforo(120, 90));
        universo.put(16, new ConfiguracionSemaforo(120,120));
    }
    
    public ConfiguracionSemaforo ObtenerConfiguracion(int i){
        return (ConfiguracionSemaforo) universo.get(i);
    }
    
    public int GetTiempoIntervalHorizontal(int conf){
        int retorno;
        int factor;        
        ConfiguracionSemaforo confSem = this.ObtenerConfiguracion(conf);
        factor = (int)(this.intervalo/(confSem.getTiempoVerdeHorizontal()+confSem.getTiempoVerdeVertical()));
        retorno = confSem.getTiempoVerdeHorizontal()*factor;
        return retorno;
    }
    
    public int GetTiempoIntervalVertical(int conf){
        int retorno;
        int factor;
        ConfiguracionSemaforo confSem = this.ObtenerConfiguracion(conf);
        factor = (int)(this.intervalo/(confSem.getTiempoVerdeHorizontal()+confSem.getTiempoVerdeVertical()));
        retorno = confSem.getTiempoVerdeVertical()*factor;
        return retorno;
    }    
    
    public static Universo GetInstance(){
        if (instance==null){
            instance = new Universo();
        }
        return instance;
    }
    
    public int GetCantidadConfiguracionesPosibles(){
        return universo.size();
    }
    
}
